// 引入 Vuex 的 store，用于管理应用的状态（如用户的认证信息）
import store from "@/store";

module.exports = (vm) => {
  // 初始化请求配置
  uni.$u.http.setConfig((config) => {
    /* config 为默认全局配置 */
    // 设置 API 的根域名，所有请求都会基于这个 URL 发起
    config.baseURL = "http://py12306.learnerhub.net"; // 本地开发时可以设置为 localhost 或其他后端地址
    return config; // 返回修改后的配置
  });

  // 请求拦截器：在每次请求发送之前执行
  uni.$u.http.interceptors.request.use(
    (config) => {
      // 获取本地存储中的用户认证 token
      const authToken = uni.getStorageSync("auth-token");
      if (authToken) {
        // 如果存在 token，则将其添加到请求头中
        config.header.Authorization = `Bearer ${authToken}`;
      }
      return config; // 返回修改后的请求配置
    },
    (config) => {
      // 如果请求拦截失败，返回拒绝的 Promise
      return Promise.reject(config);
    }
  );

  // 响应拦截器：在每次响应返回之后执行
  uni.$u.http.interceptors.response.use(
    (response) => {
      // 获取响应数据，默认为空对象
      const data = response.data || {};

      // 判断响应是否成功（code === 0 表示成功）
      if (data.code === 0) {
        return Promise.resolve(data); // 成功时返回数据
      } else {
        // 处理认证相关错误（code 为 110001、110003 或 110005）
        if ([110001, 110003, 110005].includes(data.code)) {
          // 用户认证有问题，清空 store 中的认证状态
          store.dispatch("revertAuth");
        }

        // 隐藏加载动画
        uni.hideLoading();
        // 显示错误提示
        uni.showToast({
          icon: "error", // 错误图标
          duration: 2000, // 提示持续时间（毫秒）
          title: data.msg || response.msg, // 错误信息
        });
        return Promise.reject(response); // 返回拒绝的 Promise
      }
    },
    (response) => {
      // 处理网络错误或服务器未响应的情况
      uni.hideLoading(); // 隐藏加载动画
      const data = response.data || {}; // 获取响应数据，默认为空对象
      // 显示错误提示
      uni.showToast({
        icon: "error", // 错误图标
        duration: 2000, // 提示持续时间（毫秒）
        title: data.msg || response.msg, // 错误信息
      });
      return Promise.reject(response); // 返回拒绝的 Promise
    }
  );
};